package com.sinosoft.brokerchannel.base.server;

import com.sinosoft.brokerchannel.base.utile.ToolUtils;
import com.netflix.hystrix.exception.HystrixTimeoutException;

import feign.FeignException;
import feign.hystrix.FallbackFactory;

/**   
  * 需求名称:
  * 类描述:[feign嗲调用是出现异常继承类]
  * @author [@wem]
  * @date [2017年9月28日 下午4:13:11]
  * @version [v1.0]
  */
public abstract class BaseFeignExceptionServer<T> implements FallbackFactory<T>  {
	
	/**
	 * 	 
	 *  需求名称：[需求/BUG名称]
	 *  功能:[分别判断异常类型]
	 *  @author [@wem]
	 *  @date 2017年9月30日 上午11:58:45
	 *  功能说明：
	 *	   1.说明1；<br/>
	 *	   2.说明2。<br/>
	 *     ······
	 *  @param throwable
	 *  return
	 */
	private String equalsException (Throwable throwable) {
		
		if(throwable instanceof HystrixTimeoutException) {
			return throwable.getMessage();
		}
		if(throwable instanceof FeignException) {
			return throwable.getMessage();
		}
		 
		return null;
	}
	 
	/**
	 * 	 
	 *  需求名称：[需求/BUG名称]
	 *  功能:[获取feign调用时出现的异常]
	 *  @author [@wem]
	 *  @date 2017年9月30日 上午11:59:06
	 *  功能说明：
	 *	   1.说明1；<br/>
	 *	   2.说明2。<br/>
	 *     ······
	 *  @param throwable
	 *  return
	 */
	protected String methodReturn (Throwable throwable) {
		String equalsException = this.equalsException(throwable);
		if(ToolUtils.isNullOrEmpty(equalsException)) {
			 return equalsException;
		 } 
		return throwable.getMessage();
	}
	 
}
